<!DOCTYPE html>
<html lang="en" class="is-white">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" type="image/png" href="/favicon.png">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>
      What is Zoraxy Plugin | Zoraxy Documentation
    </title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/2.1.0/showdown.min.js" integrity="sha512-LhccdVNGe2QMEfI3x4DVV3ckMRe36TfydKss6mJpdHjNFiV07dFpS2xzeZedptKZrwxfICJpez09iNioiSZ3hA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
    <!-- css -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocas-ui/5.0.2/tocas.min.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tocas-ui/5.0.2/tocas.min.js"></script>
    <!-- Fonts -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@400;500;700&display=swap" rel="stylesheet">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <!-- Code highlight -->
    <!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/default.min.css"> -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js"></script>
    <!-- additional languages -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/go.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/c.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/javascript.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/css.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/xml.min.js"></script>
    <style>
      #msgbox{
      position: fixed;
      bottom: 1em;
      right: 1em;
      z-index: 9999;
      }

      @keyframes fadeIn {
      from {
      opacity: 0;
      }
      to {
      opacity: 1;
      }
      }

      dialog[open] {
      animation: fadeIn 0.3s ease-in-out;
      }

      code{
      border-radius: 0.5rem;
      }
    </style>
    <script src="/plugins/html/assets/theme.js"></script>
  </head>
  <body>
    <div class="ts-content">
      <div class="ts-container">
        <div style="float: right;">
          <button class="ts-button is-icon" id="darkModeToggle">
            <span class="ts-icon is-moon-icon"></span>
          </button>
        </div>
        <div class="ts-tab is-pilled">
          <a href="" class="item" style="user-select: none;">
            <img id="sysicon" class="ts-image" style="height: 30px" white_src="/plugins/html/assets/logo.png" dark_src="/plugins/html/assets/logo_white.png" src="/plugins/html/assets/logo.png"></img>
          </a>
          <a href="#!" class="is-active item">
            Documents
          </a>
          <a href="https://github.com/tobychui/zoraxy/tree/main/example/plugins" target="_blank" class="item">
            Examples
            <span class="ts-icon is-arrow-up-right-from-square-icon"></span>
          </a>
        </div>
      </div>
    </div>
    <div class="ts-divider"></div>
    <div>
      <div class="has-padded">
        <div class="ts-grid mobile:is-stacked">
          <div class="column is-4-wide">
            <div class="ts-box">
              <div class="ts-menu is-end-icon">
                <a class="item">
                  Introduction
                  <span class="ts-icon is-caret-down-icon"></span>
                </a>
                <div class="ts-menu is-dense is-small is-horizontally-padded">
                  <a class="item is-active" href="/plugins/html/1. Introduction/1. What is Zoraxy Plugin.html">
                    What is Zoraxy Plugin
                  </a>
                  <a class="item" href="/plugins/html/1. Introduction/2. Getting Started.html">
                    Getting Started
                  </a>
                  <a class="item" href="/plugins/html/1. Introduction/3. Installing Plugin.html">
                    Installing Plugin
                  </a>
                  <a class="item" href="/plugins/html/1. Introduction/4. Enable Plugins.html">
                    Enable Plugins
                  </a>
                  <a class="item" href="/plugins/html/1. Introduction/5. Viewing Plugin Info.html">
                    Viewing Plugin Info
                  </a>
                </div>
                <a class="item">
                  Architecture
                  <span class="ts-icon is-caret-down-icon"></span>
                </a>
                <div class="ts-menu is-dense is-small is-horizontally-padded">
                  <a class="item" href="/plugins/html/2. Architecture/1. Plugin Architecture.html">
                    Plugin Architecture
                  </a>
                  <a class="item" href="/plugins/html/2. Architecture/2. Introspect.html">
                    Introspect
                  </a>
                  <a class="item" href="/plugins/html/2. Architecture/3. Configure.html">
                    Configure
                  </a>
                  <a class="item" href="/plugins/html/2. Architecture/4. Capture Modes.html">
                    Capture Modes
                  </a>
                  <a class="item" href="/plugins/html/2. Architecture/5. Plugin UI.html">
                    Plugin UI
                  </a>
                  <a class="item" href="/plugins/html/2. Architecture/6. Compile a Plugin.html">
                    Compile a Plugin
                  </a>
                </div>
                <a class="item">
                  Basic Examples
                  <span class="ts-icon is-caret-down-icon"></span>
                </a>
                <div class="ts-menu is-dense is-small is-horizontally-padded">
                  <a class="item" href="/plugins/html/3. Basic Examples/1. Hello World.html">
                    Hello World
                  </a>
                  <a class="item" href="/plugins/html/3. Basic Examples/2. RESTful Example.html">
                    RESTful Example
                  </a>
                  <a class="item" href="/plugins/html/3. Basic Examples/3. Static Capture Example.html">
                    Static Capture Example
                  </a>
                  <a class="item" href="/plugins/html/3. Basic Examples/4. Dynamic Capture Example.html">
                    Dynamic Capture Example
                  </a>
                </div>
                <a class="item" href="/plugins/html/index.html">
                  index
                </a>
                <a class="item" href="/plugins/html/zoraxy_plugin API.html">
                  zoraxy_plugin API
                </a>
              </div>
            </div>
          </div>
          <div class="column is-12-wide">
            <div class="ts-box">
              <div class="ts-container is-padded has-top-padded-large">
                <h1 id="what-is-zoraxy-plugin">
                  What is Zoraxy Plugin?
                </h1>
                <p>
                  <p class="ts-text">
                    Last Update: 25/05/2025
                  </p>
                </p>
                <div class="ts-divider has-top-spaced-large"></div>
                <p>
                  <p class="ts-text">
                    Zoraxy Plugin is a powerful extension feature designed to enhance the functionality of the Zoraxy system. It provides additional features and capabilities that are not part of the core system, allowing users to customize their experience and optimize performance. The plugin is built to be modular and flexible, enabling users to tailor their Zoraxy environment to meet specific needs.
                  </p>
                </p>
                <p>
                  <p class="ts-text">
                    Zoraxy plugins are distributed as binaries, and developers have the flexibility to choose whether to open source them or not
                    <span class="ts-text is-heavy">
                      as the plugin library and interface are open source under the LGPL license
                    </span>
                    .
                  </p>
                </p>
                <p>
                  <p class="ts-text">
                    There are two primary types of plugins:
                  </p>
                </p>
                <div class="ts-list is-unordered">
                  <div class="item">
                    <span class="ts-text is-heavy">
                      Router plugins
                    </span>
                    : Involved with connections from HTTP proxy rules.
                    <br>
                  </div>
                  <div class="item">
                    <span class="ts-text is-heavy">
                      Utility plugins
                    </span>
                    : Provide user interfaces for various network features that operate independently of the Zoraxy core.
                    <br>
                  </div>
                </div>
                <div class="ts-divider has-top-spaced-large"></div>
                <h2 id="how-plugins-are-distributed-installed">
                  How plugins are distributed &amp; installed
                </h2>
                <p>
                  <p class="ts-text">
                    Zoraxy plugins are distributed as platform-dependent binaries, tailored to specific operating systems and CPU architectures. These binaries follow a naming convention that includes the operating system, CPU architecture, and plugin name, such as
                    <span class="ts-text is-code">
                      linux_amd64_foobar
                    </span>
                    ,
                    <span class="ts-text is-code">
                      windows_amd64_foobar.exe
                    </span>
                    , or
                    <span class="ts-text is-code">
                      linux_arm64_foobar
                    </span>
                    .
                  </p>
                </p>
                <p>
                  <p class="ts-text">
                    To manually install a plugin for testing, place the binary file into the
                    <span class="ts-text is-code">
                      /plugins/{plugin_name}/
                    </span>
                    folder within your Zoraxy installation directory.
                  </p>
                </p>
                <div class="ts-quote">
                  <p>
                    <p class="ts-text">
                      <span class="ts-text is-heavy">
                        Warning:
                      </span>
                      The binary name inside the folder must match the plugin folder name. For example, the binary should be named
                      <span class="ts-text is-code">
                        foobar
                      </span>
                      (or
                      <span class="ts-text is-code">
                        foobar.exe
                      </span>
                      on Windows) if placed in the
                      <span class="ts-text is-code">
                        /plugins/foobar/
                      </span>
                      folder. Avoid using names like
                      <span class="ts-text is-code">
                        foobar_plugin.exe
                      </span>
                      .
                    </p>
                  </p>
                </div>
                <p>
                  <p class="ts-text">
                    For distribution, a plugin store system is used. The plugin store architecture is similar to the one built into the Arduino IDE, with a manager URL (a JSON file) listing all the plugins supported by that store. See the documentation section for more details on how to implement your own plugin store.
                  </p>
                </p>
                <div class="ts-divider has-top-spaced-large"></div>
                <h2 id="plugin-vs-pull-request">
                  Plugin vs Pull Request
                </h2>
                <p>
                  <p class="ts-text">
                    The Zoraxy plugin was introduced to address specific use cases that enhance its functionality. It serves as an extension to the core Zoraxy system, providing additional features and capabilities while maintaining the integrity of the core system.
                  </p>
                </p>
                <div class="ts-list is-unordered">
                  <div class="item">
                    Designed to handle features that are challenging to integrate directly into the Zoraxy core.
                    <br>
                  </div>
                  <div class="item">
                    Caters to scenarios where certain features are only applicable in limited situations, avoiding unnecessary resource consumption for other users.
                    <br>
                  </div>
                  <div class="item">
                    Allows for frequent updates to specific code components without impacting the core&rsquo;s stability or causing downtime.
                    <br>
                  </div>
                </div>
                <div class="ts-divider has-top-spaced-large"></div>
                <h3 id="when-should-you-add-a-core-pr-or-a-plugin">
                  When should you add a core PR or a plugin?
                </h3>
                <p>
                  <p class="ts-text">
                    In certain situations, implementing a feature as a plugin is more reasonable than directly integrating it into the Zoraxy core:
                  </p>
                </p>
                <div class="ts-list is-unordered">
                  <div class="item">
                    <span class="ts-text is-heavy">
                      Core PR
                    </span>
                    : If the feature is relevant to most users and enhances Zoraxy&rsquo;s core functionality, consider submitting a core Pull Request (PR).
                    <br>
                  </div>
                  <div class="item">
                    <span class="ts-text is-heavy">
                      Plugin
                    </span>
                    : If the feature is targeted at a smaller user base or requires additional dependencies that not all users need, it should be developed as a plugin.
                    <br>
                  </div>
                </div>
                <p>
                  The decision depends on the feature&rsquo;s general relevance and its impact on core stability. Plugins offer flexibility without burdening the core.
                </p>
              </div>
              <br>
              <br>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="ts-container">
      <div class="ts-divider"></div>
      <div class="ts-content">
        <div class="ts-text">
          Zoraxy © tobychui
          <span class="thisyear">
            2025
          </span>
        </div>
      </div>
    </div>
    <script>
      $(".thisyear").text(new Date().getFullYear());
    </script>
    <script>
      hljs.highlightAll();
    </script>
  </body>
</html>